iT邦幫忙

2024 iThome 鐵人賽

DAY 12
1
Python

從概念到應用:Python實戰開發學習之旅系列 第 12

[Day11] 第二週 - 進階工程師的開端 - 標準函式庫的應用

  • 分享至 

  • xImage
  •  

今日目標

https://ithelp.ithome.com.tw/upload/images/20240926/201210520x6ggffzBQ.png

今天會暫緩介紹許多複雜的軟體工程架構
會介紹python的函式庫來讓我們做資料處理的應用~

根據我們的學習曲線今天會學到
1.標準函式庫
2.PIP套件管理工具
3.第三方模組的應用
4.資料處理小技巧

1.Python 標準函式庫 (Standard Library)

定義:
Python 的標準函式庫是一組內建的模組,隨 Python 解譯器一同安裝,提供了許多常用的功能,無需額外安裝或下載。這些模組包含基本的系統操作、文件處理、網路連接、數據處理、壓縮等功能。

使用時機:
系統操作:如處理檔案系統,使用 os 模組進行檔案的創建、刪除、路徑管理等操作。
數據結構與算法:如 collections 提供了進階的資料結構(如 deque, Counter),以及 heapq 用於處理優先隊列。
日期與時間:如 datetime 可用來處理時間戳、計算時間差等。
網路連接:如 socket 用來進行網路通信,http.client 用來處理 HTTP 請求。
壓縮與存檔:如 zipfile, tarfile 可處理壓縮和解壓縮。
常見模組:

  • os: 與操作系統進行交互。
  • sys: 與 Python 解譯器交互。
  • math: 提供基本數學運算。
  • random: 生成隨機數。
  • json: 處理 JSON 數據格式。
  • Python 外部函式庫 (External Libraries)

簡單來說這些工具不用透過pip install直接import就可以使用了。
他是原生安裝包就提供的工具喔,之所以不一開始就載入也是因為沒必要用的套件先載入會拖累程式執行效能

  1. 效能考量:如果在程式啟動時預先載入所有標準函式庫,會增加程式的啟動時間和記憶體占用。大多數的應用只會使用特定的模組,沒有必要將不需要的模組載入內存。import 使得程式只會在需要時載入特定的模組,這樣可以避免不必要的資源消耗。

  2. 記憶體管理:每個模組的載入都會佔用系統的記憶體空間。如果所有模組都在程式啟動時載入,會導致記憶體使用量增加,尤其是在大型應用中,這會對效能造成不小的影響。

  3. 避免名稱衝突:Python 的模組和變數名稱是全域範圍有效的。如果所有模組都自動載入,可能會增加命名衝突的風險。使用 import 可以更精確地控制哪些模組的名稱進入到程式命名空間。

2.PIP安裝套件管理工具

PIP 是 Python 的套件管理工具,全名是 “Pip Installs Packages”。它讓開發者可以輕鬆地從 Python Package Index (PyPI) 下載、安裝、更新以及管理第三方套件或函式庫。

Pypi官方網站

PIP 安裝的套件來源通常是來自 PyPI(Python Package Index),這是一個專門存放和分發 Python 軟體包的倉庫。當你使用 PIP 安裝套件時,預設的情況下會從 PyPI 下載對應的包並進行安裝。

除非自家的IT有專屬的套件管理雲端,就會從那邊安裝

常用 PIP 指令

指令 功能描述
pip install package_name 安裝指定的套件
pip uninstall package_name 卸載指定的套件
pip list 列出已安裝的套件
pip show package_name 顯示指定套件的詳細資訊
pip freeze 列出已安裝套件及其版本,格式適合 requirements.txt
pip freeze > requirements.txt 將已安裝套件及其版本導出到 requirements.txt
pip install -r requirements.txt 根據 requirements.txt 安裝套件
pip search package_name 搜尋 PyPI 中的套件 (新版 pip 可能已移除)
pip check 檢查已安裝的套件是否有相依性問題
pip install --upgrade package_name 升級指定的套件
pip config list 列出 PIP 的所有配置項目
pip --version 檢查 PIP 的版本
pip install --user package_name 安裝套件到用戶區,而不是全局環境
pip cache purge 清除 PIP 的快取
pip install --no-cache-dir package_name 不使用快取安裝套件

3.第三方模組的應用

定義:
外部函式庫是指不包含在標準函式庫內的模組,需要透過 Python 的套件管理工具 pip 來安裝。這些函式庫由社群或第三方開發者開發,通常提供更專業的功能,如數據科學、機器學習、網頁開發等。

使用時機:
數據科學與機器學習:如 numpy, pandas, scikit-learn 等外部函式庫,提供數據分析、科學計算、機器學習演算法。
網頁開發:如 Flask, Django 是常見的網頁框架,用於開發網站和 API。
資料庫操作:如 SQLAlchemy, Peewee 用於 ORM(對象關聯映射),簡化與資料庫的交互。
網路爬蟲:如 requests, beautifulsoup4 用於發送 HTTP 請求、解析網頁內容。
圖像處理:如 Pillow, OpenCV 提供圖像處理功能。
/images/emoticon/emoticon06.gif

常見外部函式庫:

requests: 用於處理 HTTP 請求,發送和接收資料。
numpy: 用於處理高效的多維陣列和數學運算。
pandas: 用於資料分析和處理的強大工具。
matplotlib: 用於資料可視化,生成圖表。
tensorflow: 用於深度學習和機器學習的框架。
總結:
標準函式庫 提供了處理大部分基本功能的模組,如檔案處理、數據處理、網路連接等,適合基本的系統或應用開發。
外部函式庫 則由第三方開發,提供更專業和進階的功能,適合需要高度專業領域(如數據科學、機器學習)的開發場景。

大家可以根據自己的需求來引入或安裝套件喔

個人覺得最實用的不外乎就是json、pandas跟numpy 這三個是身為python工程師常用的套件。
以下來舉例給大家看~

4.常用的資料處理小技巧

4.1 Json (JavaScript Object Notation)的資料處理

使用情境:
資料交換:用來在前端和後端之間進行資料傳遞,特別常見於 Web API 開發。
存儲與配置:常用於儲存設定檔和輕量級的資料格式。
優點:
輕量簡單:JSON 是純文本格式,非常輕量且易讀易寫。
跨語言支持:大多數程式語言都能輕鬆解析和生成 JSON 資料。
結構化:可以表示複雜的資料結構,如嵌套物件與陣列。
缺點:
不支援複雜資料型別:例如,無法直接表示日期或時間等型別,需要手動處理。
不支援註解:不像 YAML 等格式,JSON 中不允許註解。

現在除了網頁工程師以外,APP工程師還有資料處理工程師都會蠻常使用的格式。除了簡單易懂也很輕量化

import json

# 將 Python 字典轉換為 JSON 字串
data = {
    "name": "Alice",
    "age": 25,
    "languages": ["English", "French"]
}

json_data = json.dumps(data)
print(json_data)

# 將 JSON 字串轉回 Python 字典
parsed_data = json.loads(json_data)
print(parsed_data)

4.2 Pandas

使用情境:
資料分析:特別適合用於大規模的數據分析與處理。
處理結構化數據:常見於數據科學,能夠輕鬆讀取 CSV、Excel 等格式並進行轉換。
優點:
高效操作:擁有強大的資料操作功能,如資料篩選、清理、排序等。
處理缺失值:可以輕鬆應對大數據集中缺失值的情況。
靈活性:能與其他數據科學工具如 NumPy、Matplotlib 等無縫集成。
缺點:
內存佔用大:當處理非常大的數據集時,Pandas 的內存占用相對較高。
學習曲線:對於新手來說,Pandas 的一些高級操作和方法可能不易理解。

import pandas as pd

# 建立 DataFrame
data = {
    "Name": ["John", "Anna", "Peter"],
    "Age": [28, 24, 35],
    "City": ["New York", "London", "Berlin"]
}

df = pd.DataFrame(data)
print(df)

# 篩選年齡大於25的人
filtered_df = df[df['Age'] > 25]
print(filtered_df)

熊貓有很多好用的函術可以解決資料處理的問題

4.3 NumPy (Numerical Python)

使用情境:
數值計算:特別適合處理大量數字資料及進行矩陣運算。
科學計算:經常在機器學習、統計、數學建模等領域中應用。
優點:
高效:內部使用 C 語言實現,對於數字運算比傳統 Python 快很多。
支持矩陣運算:具有強大的矩陣和多維陣列操作功能。
與其他庫整合:像 SciPy、TensorFlow 等科學計算庫都依賴 NumPy。
缺點:
不適合結構化數據:對於結構化數據處理,NumPy 的功能相對較弱。
學習曲線較陡:對於剛接觸的人來說,特定的多維陣列操作可能較難掌握。

import numpy as np

# 創建 NumPy 陣列
array = np.array([1, 2, 3, 4, 5])
print(array)

# 執行向量化運算
array_squared = array ** 2
print(array_squared)

# 創建一個 3x3 的矩陣
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(matrix)

# 矩陣乘法
result = np.dot(matrix, matrix)
print(result)

這個根本是給數學魔人使用的吧(X)
這個其實在給機器學習或是資料科學工程師的好能手。他可以處理很多維度的矩陣運算

總結

套件 使用情境 優點 缺點
JSON 資料交換、輕量級存儲 跨語言支持,輕量簡單,結構化 無法表示複雜資料類型,無註解功能
Pandas 結構化數據處理與分析 強大的資料分析功能,方便處理缺失值 內存佔用大,學習曲線較陡
NumPy 數值計算,科學計算 高效數字運算,支持矩陣與多維陣列操作 不適合結構化數據,學習曲線可能較陡

在新手期間~我都建議
可以把這三個好用的套件學起來
其他就依照跟人需求去學習喔


上一篇
[Day10] 第二週 - 進階工程師的開端 - 模組化程式設計(Modular programming)
下一篇
[Day12] 第二週 - 進階工程師的開端 - Class 與物件導向
系列文
從概念到應用:Python實戰開發學習之旅31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言